shell学习笔记 1 - 编程基础语法
变量与函数
shell语言的赋值就和python语言是弱类型语言,对于简单数据类型,即数值与字符串,直接采用下列方法即可。而且,在赋值时不要在=两边加空格,否则会编译错误
1 | a=1 |
变量引用
"var"
双引号:弱引用,echo "${var}"
输出这个变量具体值'var'
单引号:强引用,echo '${var}'
输出”${var}”字符串- `` 反引号等同于
$()
变量作用域
shell中的变量定义默认的作用域是全局,如果想实现其他语言的闭包,则需要加装local
字段。
P.S. 此处的全局变量范围是当前进程
1 | a=1 |
这样,在调用func1()
时,其内部a
的值就可以变成2。
变量运算
整数
假定先定义好a=1;b=2
- expr:
c="expr $a+$b"
- $(()):
c=$((a+b))
- $[]:
c=$[a+b]
- let:
let c=a+b
浮点数
echo "scale=2;6/4"
|bcecho "print 6/4"|python
这给人感觉貌似shell并不怎么支持浮点数运算,得交给其他程序去实现,可能跟他的业务不怎么偏计算有关吧。。
条件控制
if语句
1 | if test "2>3" |
其中test "2>3"
也可以写作["2>3"]
,其他常见的布尔运算符和其他语言一致:与&&
,或||
,非!
。
switch语句
1 | case expression in |
这里pattern
指的是类似于-d -f
这种匹配模式
对于字符串的判断,有很多和正则表达式相似的表达式,例如:
1 | -n str1 #str1为非 null |
之后,也会单独讲一讲这种判断规则
循环
for循环
1 | for i in [list like] |
while循环
1 | while ["3>4"] |
until循环
1 | until ["3>4"] |
函数
函数定义
1 | function func1 () { |
作用域:在函数内部定义local变量名如果和外部一样的话,return的时候不会影响外部,即返回值使用函数内的值,但函数使用完就进行销毁,不影响外面同名值。
函数参数
shell不用特意在函数定义时写形参,在函数体内部可以直接通过$1, $2
这种形式来指定参数
函数调用
在命令行中调用写好的函数时,直接把函数名打上,如果函数需要参数,则将参数以空格形式隔开
1 | # 调用无参数函数 |
关于return结果的调用,
使用
$?
;此方法只能返回0-255的整数,且需要先采取上面方式调用,然后去取值。(感觉好不智能,有点汇编的感觉)直接写成
result=$(func2 1)
,这个方法对于返回值没有过多的限定,以后用这个比较好。